import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router';
import { useUserStore } from '@/store';

export default function usePermission() {
  const userStore = useUserStore();
  return {
    // 验证菜单权限
    accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
      return (
        !route.meta?.requiresAuth || // 当前菜单不验证权限
        !route.meta?.permission || //  当前菜单没有设置权限
        userStore.admin || // 当前用户是超级管理员
        userStore.permissions?.includes(route.meta?.permission as string) // 用户的菜单权限包含当前菜单
      );
    },
    // 验证当前路由是否符合用户权限  如果不符合则进入第一个符合用户权限的路由
    findFirstPermissionRoute(_routers: any, permissions = []) {
      const cloneRouters = [..._routers];
      while (cloneRouters.length) {
        const firstElement = cloneRouters.shift();
        if (
          permissions.find((item) => item === firstElement.meta.permission) || // 如果匹配到当前用户含有当前权限则通过
          firstElement.meta.permission === '*' || // 如果权限 为 * 则默认通过
          !firstElement.meta.requiresAuth // 如果当前验证权限没有开启 默认通过
        )
          return { name: firstElement.name };
        if (firstElement?.children) {
          cloneRouters.push(...firstElement.children);
        }
      }
      return null;
    },
    // You can add any rules you want
  };
}
